/**
 * 工具类，作为mui的扩充
 * by zhujj 20160910
 */
var utils = {};

//项目基础路径
//utils.HOST = 'http://120.209.177.135:8580/mhwz/';
utils.HOST = 'http://hf.zhuofansoft.com:8580/mhwz/';
//格式化字体大小
utils.formatFontsize = function() {
	mui('div,p,a,span').each(function() {
		this.style.fontSize = '16px';
	});
}

//检查网络
//document.addEventListener("netchange", utils.netchangeListener, false);});
utils.netchangeListener = function() {
	if(plus.networkinfo.getCurrentType() == plus.networkinfo.CONNECTION_NONE) {
		mui.toast("网络异常，请检查网络设置！");
		return true;
	} else {

	}
	return false;
}

// 获取url中的参数
utils.getUrlParam = function(name) {
	var reg = new RegExp("(^|&)" + name + "=([^&]*)(&|$)");
	var r = window.location.search.substr(1).match(reg);
	if(r != null) {
		return unescape(r[2]);
	} else {
		return null;
	}
}

/*进度条*/
utils.showWaiting = function(hintText) {
	var content = "正在加载...";
	if(hintText) content = hintText;
	var wait = plus.nativeUI.showWaiting(content, {
		padding: "26px"
	});
	return wait;
}

/*关闭进度条*/
utils.closeWaiting = function() {
	if(window.plus)
		plus.nativeUI.closeWaiting();
}

/**
 * Post联网
 * @param {Object} url 网络地址
 * @param {Object} success 成功回调function(data)
 * @param {Object} param 参数 字符串拼接 "user=HBuilder&test=value"
 * @param {Object} config 配置json {'showWait':false, 'toastErr':false, 'showErr':true, 'method':"POST"}
 * @param {Object} err 错误回调function()
 * showWait 默认true,显示进度条对话框;
 * toastErr 默认true,弹出提示:"网络连接失败";
 * showErr 默认false,不显示错误对话框;
 * method 默认POST请求;(地图定位使用'GET');
 */
var tokenErrorHasTip = false;
utils.ajax = function(url, success, param, config, err) {
	mui.plusReady(function() {
		if(config == null) config = {};
		if(config.host == null) config["host"] = utils.HOST;
		if(config.showWait == null) config["showWait"] = false;
		if(config.toastErr == null) config["toastErr"] = true;
		if(config.showErr == null) config["showErr"] = false;
		if(config.method == null) config["method"] = "POST";
		if(config.dataType == null) config["dataType"] = "json";
		if(config.headers == null) config["headers"] = 'application/x-www-form-urlencoded';
		if(param){
			if(typeof param == 'object'){
				param = jsonToParams(param);
			}
			param = encodeURI(param);
		}
		plus.navigator.removeAllCookie();
		//plus.navigator.setCookie(Host, "JSESSIONID=" +localStorage.getItem("JSESSIONID"));
		//添加公共参数
		if(param){
			param += "&" + jsonToParams({
				deviceID : plus.device.uuid,//设备唯一标识
				deviceName : plus.os.name.toLowerCase()//设备类型
			})
		}else{
			param = jsonToParams({
				deviceID : plus.device.uuid,//设备唯一标识
				deviceName : plus.os.name//设备类型
			})
		}

		//显示进度条 默认显示
		if(config.showWait) utils.showWaiting(); //显示进度条;

		var xhr = new plus.net.XMLHttpRequest();
		xhr.onreadystatechange = function() {
			if(xhr.readyState == 4) {
				if(config.showWait) utils.closeWaiting(); //关闭进度条
//				console.log("请求url--> " + url + " 参数--> " + param + " xhr=" + xhr.responseText + " 状态=" + xhr.status); //TODO
//				console.log("请求url--> " + url );
				if(xhr.status == 200) {
					var data = xhr.responseText;
					var datas = JSON.parse(data);
					if(datas && datas.state == '-200' ){
						removeState();//移除登录状态
						localStorage.removeItem('TOKEN');
						if(!tokenErrorHasTip){
							tokenErrorHasTip = true;
							mui.toast(datas.msg  ? datas.msg  : "设备状态异常,请重试");
							showLogin(true);
							setTimeout(function(){
								tokenErrorHasTip = false;
							},1000)
						}
					}else{
						success(data);
					}
				} else {
					//请求失败
					if(err) err();
					utils.closeWaiting();
					var check = utils.netchangeListener();//检测网络
					if(!check&&!err){
						console.log(url);
						mui.toast('抱歉，当前服务不可用，请稍后再试！');
					}
				}
			}
		}
		xhr.withCredentials = true;
		xhr.open(config.method, config.host + url);
		xhr.timeout = 5000;
		xhr.responseType = config.dataType;
		xhr.setRequestHeader('Content-Type', config.headers); //传参必须写
		var token = localStorage.getItem('TOKEN');
		//封装TOKEN在头信息中
		if(token){
			xhr.setRequestHeader('Authorization', token);
		}
		xhr.send(param);
	});
}

/**
  * js显示json数据时出现日期类型显示[object,object]现象解决！js调用如：format(zwfwCaseAppVo.applyTime,'yyyy-MM-dd HH:mm:ss')
  * @param {Object} time  日期类型显示[object,object] 如：zwfwCaseAppVo.applyTime
  * @param {Object} format 需要格式化的格式 如：yyyy-MM-dd HH:mm:ss
  */
utils.format = function(time, format){ 
	if(null == time || time == '' || time == undefined){
		return "";
	}
	var timeVar = time.time;
     var t = new Date(timeVar); 
     var tf = function(i){return (i < 10 ? '0' : '') + i}; 
     return format.replace(/yyyy|MM|dd|HH|mm|ss/g, function(a){ 
         switch(a){ 
             case 'yyyy': 
                 return tf(t.getFullYear()); 
                 break; 
             case 'MM': 
                 return tf(t.getMonth() + 1); 
                 break; 
             case 'mm': 
                 return tf(t.getMinutes()); 
                 break; 
             case 'dd': 
                 return tf(t.getDate()); 
                 break; 
             case 'HH': 
                 return tf(t.getHours()); 
                 break; 
             case 'ss': 
                 return tf(t.getSeconds()); 
                 break; 
         } 
     }); 
}; 

/*创建元素,并设置类型和id*/
/*创建元素,并设置类型和id*/
function createElm(_tag, params,innerhtml,childerns) {
	var ele = document.createElement(_tag);
	params = params?params:{};
	for(var key in params ){
		var val = params[key];
		if(val && val!=''){
			ele.setAttribute(key,val);
		}
	}
	innerhtml?ele.innerHTML=innerhtml:'';
	childerns?childerns:[];
	if(childerns && childerns.length>0){
		for(var i=0;i<childerns.length;i++){
			if(childerns[i]){
				ele.appendChild(childerns[i])
			}
		}
	}
	return ele;
}

/**
 * 初始化界面:先显示本地的数据,再联网更新服务器数据
 * @param {Object} storageKey 本地数据key
 * @param {Object} url 联网地址
 * @param {Object} initview 初始化界面的回调,数据data
 * @param {Object} param 联网参数 字符串拼接 "user=HBuilder&test=value"
 * 注意:1.必须导入md5.js;2.initView可能会执行两次,控件监听和创建请勿重复;
 */
function initViewFromLocalOrNet(storageKey, url, config, param, initView, err) {
	//获取本地缓存,初始化界面
	var md5_local;
	var data_local_str = localStorage.getItem(storageKey);
	if(data_local_str) {
		//		initView(JSON.parse(data_local_str));
		initView(data_local_str);
		md5_local = md5(data_local_str);
	}
	setTimeout(function() {
		utils.ajax(url, function(data) {
			//md5不一致,则刷新
			var data_net_str = data;
			if(md5_local != md5(data_net_str)) {
				initView(data);
				localStorage.setItem(storageKey, data_net_str);
			}
		}, param, config, err);
	}, 1000); //避免争抢资源
}

/*时间转换
 *type=1; 2013年11月06日 16:05:50
 *type=2; 2013年11月06日
 *type=3; 2013-11-06
 *type=其他; 2013-11-06 16:05:50
 */
Date.prototype.getDateStr = function(type) {
	var year = this.getFullYear();
	var month = this.getMonth() + 1;
	var date = this.getDate();
	var hours = this.getHours();
	var mins = this.getMinutes();
	var second = this.getSeconds();
	var add0 = function(num) {
		if(num < 10) {
			num = "0" + num;
		}
		return num;
	}
	if(type == 1) {
		return year + "年" + add0(month) + "月" + add0(date) + "日 " + add0(hours) + ":" + add0(mins) + ":" + add0(second);
	} else if(type == 2) {
		return year + "年" + add0(month) + "月" + add0(date) + "日";
	} else if(type == 3) {
		return year + "-" + add0(month) + "-" + add0(date);
	} else {
		return year + "-" + add0(month) + "-" + add0(date) + " " + add0(hours) + ":" + add0(mins) + ":" + add0(second);
	}
}

/**
 * 验证手机号 是否被注册
 * @param {Object} phone
 * @param {Object} callback
 */
function checkPhone(phone,callback){
	var mobileReg = /^1[3|5|8|4|6]\d{9}$/;
	if(mobileReg.test(phone)){
		var para = 'netUserPhone='+phone;
		var url = "appHttpService/appCheckPhone.do";
		var config = {
			'timeout': 2000,
		};
		utils.ajax(url,function(data){
			data = eval("(" + data + ")");
			if (data.code == 0 || data.code == '0' ) {
				callback(true);
			}else{
				mui.toast(data.result);
				return false;
			}
		},para,config,function(){
			mui.toast('验证手机号异常');
			return false;
		})
	}else{
		mui.toast('请输入正确的手机号');
		return false;
	}
}

/*json转参数*/
function jsonToParams(paramJson, isALL) {
	var params = "";
	for(var key in paramJson) {
		var _value = paramJson[key];
		if(_value != null) { //不传null
			if(_value != 0 || isALL == true) { //如果不为0,或者什么都可以传的时候才拼接
				params += "&" + key + "=" + _value;
			}
		}
	}
	params = params.substr(1);
	return params;
}

//短信号码
function isMoible(phoneNum){
	var mobileReg = /^1\d{10}$/;
	return mobileReg.test(phoneNum)?true:false;
}

//邮箱
function isEmail(email){
	var emailReg = /^([a-zA-Z0-9]+[_|\_|\.]?)*[a-zA-Z0-9]+@([a-zA-Z0-9]+[_|\_|\.]?)*[a-zA-Z0-9]+\.[a-zA-Z]{2,3}$/;
	return emailReg.test(email)?true:false;
}

//身份证号
function isIDCard(iDCard) {
	var isIDCard1=/^[1-9]\d{7}((0\d)|(1[0-2]))(([0|1|2]\d)|3[0-1])\d{3}$/;//(15位)
	var isIDCard2=/^[1-9]\d{5}[1-9]\d{3}((0\d)|(1[0-2]))(([0|1|2]\d)|3[0-1])\d{3}([0-9]|X)$/;//(18位)
	if((isIDCard1.test(iDCard)) || (isIDCard2.test(iDCard))){
		return true;
	}
	return false;
}

/**
 * 关闭waiting框并且展示当前页面
 */
function closeWaitingAndShowView(){
	var cv = plus.webview.currentWebview();//当前页面
	if(!cv.isVisible())
		cv.show('slide-in-right',200);
	utils.closeWaiting();
}

/**
 * 关闭首页waiting框及页面切换-主界面
 */
function closeWaitingAndSwithView(){
	var cv = plus.webview.currentWebview();//当前页面
	var cv_id = cv.id;
	cv.show('fade-in',300);//显示当前页面
	var v = plus.webview.getLaunchWebview();//启动页面，在manifest.json中配置的启动页
	v.evalJS('hideWebview();');//通知隐藏页面
	utils.closeWaiting();
}

/**
 * 生成4位随机验证码
 */
function randomCode(){
	var codeSequence = [ 'A', 'B', 'C', 'D', 'E', 'F', 'G', 'H', 'I', 'J', 'K', 'L', 'M', 'N', 
						 'O', 'P', 'Q', 'R', 'S', 'T', 'U', 'V', 'W', 'X', 'Y', 'Z', '0', '1', 
						 '2', '3', '4', '5', '6', '7', '8', '9' ];
	var code = '';
	for (var i=0;i<4;i++) {
		var radomNum = parseInt(Math.random()*35);
		code += codeSequence[radomNum];
	}
	return code;
}
